package cn.iocoder.yudao.module.erp.service.dp;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.erp.controller.admin.dispatchvehicle.vo.DispatchVehicleSaveReqVO;
import cn.iocoder.yudao.module.erp.controller.admin.dp.dpalmt.vo.DpAlmtPageReqVO;
import cn.iocoder.yudao.module.erp.controller.admin.dp.dpalmt.vo.DpAlmtSaveReqVO;
import cn.iocoder.yudao.module.erp.dal.dataobject.dispatchvehicle.DispatchVehicleDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.dp.DpAlmtDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.dpitem.DpItemAlmtDO;

import javax.validation.*;
import java.util.List;

/**
 * ERP阿拉木图仓库 Service 接口
 * @author 天使管理员
 */
public interface DpAlmtService {

    /**
     * 创建ERP阿拉木图仓库
     * @param createReqVO 创建信息
     * @return 编号
     */
    String createDpAlmt(@Valid DpAlmtSaveReqVO createReqVO);

    /**
     * 更新ERP阿拉木图仓库
     * @param updateReqVO 更新信息
     */
    void updateDpAlmt(@Valid DpAlmtSaveReqVO updateReqVO);

    /**
     * 删除ERP阿拉木图仓库
     * @param id 编号
     */
    void deleteDpAlmt(String id);

    /**
     * 获得ERP阿拉木图仓库
     * @param id 编号
     * @return ERP阿拉木图仓库
     */
    DpAlmtDO getDpAlmt(String id);

    /**
     * 获得ERP阿拉木图仓库分页
     * @param pageReqVO 分页查询
     * @return ERP阿拉木图仓库分页
     */
    PageResult<DpAlmtDO> getDpAlmtPage(DpAlmtPageReqVO pageReqVO);

    /**
     * 获得ERP阿拉木图制单出库列表
     * @param pageReqVO
     * @return
     */
    PageResult<DpAlmtDO> dpAlmtOuterList(DpAlmtPageReqVO pageReqVO);

    /**
     * ERP阿拉木图仓库单据配车出库
     * @param createReqVO
     */
    void dpAlmtOutStroe(DispatchVehicleSaveReqVO createReqVO);

    // ==================== 子表（ERP阿拉木图制单货号详情） ====================

    /**
     * 获得ERP阿拉木图制单货号详情列表
     * @param no 运单号
     * @return ERP阿拉木图制单货号详情列表
     */
    List<DpItemAlmtDO> getDpItemAlmtListByNo(String no);

    /**
     * 获得ERP制单入库列表
     *
     * @param dispatchNumber
     * @param dpId
     * @return
     */
    List<DispatchVehicleDO> dpAlmtEnterList(String dispatchNumber, Integer line, Integer inventoryStatus, Integer dest,String dpId);

    /**
     * ERP运单入库
     * @param createReqVO
     */
    void enterStroeDpAlmt(List<DispatchVehicleSaveReqVO> createReqVO);

    /**
     * ERP到货签收
     * @param updateReqVO
     */
    void signDp(@Valid DpAlmtSaveReqVO updateReqVO);

}